package com.carsa.blackberry.ui.screen.common;

import java.util.Calendar;
import java.util.Hashtable;

import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.Dialog;

import com.carsa.blackberry.MainKeys;
import com.carsa.blackberry.domain.dto.EntregaDTO;
import com.carsa.blackberry.domain.services.impl.EntregasServiceImpl;
import com.carsa.blackberry.ui.UIKeys;
import com.carsa.blackberry.ui.screen.gruposentregas.GruposEntregasScreen;
import com.carsa.blackberry.ui.screen.gruposentregas.SeleccionarMotivoFallidaParcialScreen;
import com.carsa.blackberry.ui.screen.gruposentregas.SeleccionarMotivoFallidaTotalScreen;
import com.carsa.blackberry.util.Util;
import com.carsa.blackberry.util.ui.UIUtil;
import com.carsa.blackberry.util.ui.widget.FormField;

/**
 * @author Nahuel Barrios.
 * @since 20/07/2010.
 * @version 1.0
 */
public class DetalleGrupoEntregaScreen extends BasicScreen {

    private EntregaDTO unaEntrega;

    public DetalleGrupoEntregaScreen(Hashtable parameters) {
	super(UIKeys.TITLE_ENTREGA_SELECCIONADA);
	super.customizeScreen();

	unaEntrega = (EntregaDTO) parameters.get(MainKeys.PARAMETER_CURRENT_ENTREGA);

	FormField form = new FormField(FormField.STYLE_READ_ONLY);
	form.addField(UIKeys.FIELD_GRUPO, unaEntrega.getSammg(), Field.NON_FOCUSABLE);
	form.addField(UIKeys.FIELD_ENTREGA, unaEntrega.getVbeln(), Field.NON_FOCUSABLE);
	form.addField(UIKeys.FIELD_CLIENTE, unaEntrega.getName2(), Field.NON_FOCUSABLE);
	form.addField(UIKeys.FIELD_DIRECCION, unaEntrega.getDirec(), Field.NON_FOCUSABLE);
	form.addField(UIKeys.FIELD_OBSERVACIONES, /*unaEntrega.getObservaciones()// TODO : Functionality : OBS*/"", Field.NON_FOCUSABLE);

	ButtonField btn_exitosa = new ButtonField(UIKeys.TITLE_EXITOSA);
	btn_exitosa.setChangeListener(new FieldChangeListener() {
	    public void fieldChanged(Field field, int context) {
		if (Util.getBooleanConditionFromDialogResponse(Dialog.ask(Dialog.D_YES_NO, UIKeys.POPUP_CONFIRMAR_OPERACION)))
		    performEntregaExitosa();
	    }
	});

	ButtonField btn_fallidaTotal = new ButtonField(UIKeys.TITLE_FALLIDA_TOTAL);
	btn_fallidaTotal.setChangeListener(new FieldChangeListener() {

	    public void fieldChanged(Field field, int context) {
		if (Util.getBooleanConditionFromDialogResponse(Dialog.ask(Dialog.D_YES_NO, UIKeys.POPUP_CONFIRMAR_OPERACION)))
		    performEntregaFallidaTotal();
	    }

	});

	ButtonField btn_fallidaParcial = new ButtonField(UIKeys.TITLE_FALLIDA_PARCIAL);
	btn_fallidaParcial.setChangeListener(new FieldChangeListener() {

	    public void fieldChanged(Field field, int context) {
		if (Util.getBooleanConditionFromDialogResponse(Dialog.ask(Dialog.D_YES_NO, UIKeys.POPUP_CONFIRMAR_OPERACION)))
		    performEntregaFallidaParcial();
	    }

	});

	// ---------------------------------------------------
	// Con todos los controles ya seteados, armo la vista.
	_mainManager.add(form);
	_mainManager.add(UIUtil.getEmptyLine());

	_mainManager.add(btn_exitosa);
	_mainManager.add(btn_fallidaTotal);
	_mainManager.add(btn_fallidaParcial);

	_mainManager.add(UIUtil.getEmptyLine());
	super.addBackButton(_mainManager);
	this.add(_mainManager);
    }

    /**
     * Realiza las operaciones requeridas cuando el usuario confirma la operacion de Entrega Exitosa.
     */
    private void performEntregaExitosa() {
	Hashtable parameters = new Hashtable();
	parameters.put(MainKeys.PARAMETER_DATE_TIME_MOMENT, Calendar.getInstance().getTime());

	new EntregasServiceImpl().markEntregaAsSuccess(unaEntrega, parameters);

//	UiApplication.getUiApplication().popScreen(this);
	UiApplication.getUiApplication().pushScreen(new GruposEntregasScreen(true));
    }

    /**
     * Realiza las operaciones requeridas cuando el usuario confirma la operacion de Entrega Fallida Total.
     */
    private void performEntregaFallidaTotal() {
//	UiApplication.getUiApplication().popScreen(this);
	UiApplication.getUiApplication().pushScreen(new SeleccionarMotivoFallidaTotalScreen(unaEntrega));
    }

    /**
     * Realiza las operaciones requeridas cuando el usuario confirma la operacion de Entrega Fallida Parcial.
     */
    private void performEntregaFallidaParcial() {
//	UiApplication.getUiApplication().popScreen(this);
	UiApplication.getUiApplication().pushScreen(new SeleccionarMotivoFallidaParcialScreen(unaEntrega));
    }

    /**
     * Sobreescribo la funcionalidad por default que puse en BasicScreen para cada pantalla que tenga el boton "volver".
     * Hago esto, en este metodo porque el boton "volver" lo que hace cuando es presionado es llamar a este metodo.
     */
    public boolean onClose() {
	UiApplication.getUiApplication().popScreen(this);
	return false;
    }

}
